home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 2010 April
/
PCWorld0410.iso
/
pluginy Firefox
/
4810
/
4810.xpi
/
chrome
/
speeddial.jar
/
content
/
multikeyWindow.js
< prev
next >
Wrap
Text File
|
2010-01-31
|
13KB
|
352 lines
var MultiKey = {
initialNumber: 0,
numberThumbnails: 0,
numberDigits: 0,
ctrlPressed: false,
shiftPressed: false,
altPressed: false,
digitBox: null,
cancelledMultikey: false,
isClosing: false,
multikeyBundle: null,
targetAction: 0,
multikeySelectWhenComplete: false,
showingMultiKey: false,
initiatedFirefox3: false,
Startup: function() {
/*
MultiKey.initialNumber = window.arguments[0];
MultiKey.numberThumbnails = window.arguments[1];
MultiKey.callbackFunction = window.arguments[2];
MultiKey.cancelCallbackFunction = window.arguments[3];
MultiKey.ctrlPressed = window.arguments[4];
MultiKey.shiftPressed = window.arguments[5];
MultiKey.altPressed = window.arguments[6];
var desiredWidth = window.arguments[7];
MultiKey.targetAction = window.arguments[8];
*/
MultiKey.isClosing = false;
if (MultiKey.multikeyBundle == null) {
MultiKey.multikeyBundle = document.getElementById("bundle_multikey");
}
MultiKey.multikeySelectWhenComplete = SpeedDial.prefs.getBoolPref("multikeySelectWhenComplete");
// Set size
var mainBox = document.getElementById("multikeyMainBox");
// Set action label
var actionLabel = document.getElementById("multikeyAccessDialLabel");
if (MultiKey.targetAction == 1) {
actionLabel.setAttribute("value", MultiKey.multikeyBundle.getString("currentTab.label"));
} else if (MultiKey.targetAction == 2) {
actionLabel.setAttribute("value", MultiKey.multikeyBundle.getString("newTab.label"));
} else if (MultiKey.targetAction == 3) {
actionLabel.setAttribute("value", MultiKey.multikeyBundle.getString("backgroundTab.label"));
} else if (MultiKey.targetAction == 4) {
actionLabel.setAttribute("value", MultiKey.multikeyBundle.getString("newWindow.label"));
} else if (MultiKey.targetAction == 5) {
actionLabel.setAttribute("value", MultiKey.multikeyBundle.getString("saveDisk.label"));
}
// Add digits
MultiKey.digitBox = document.getElementById("multikeyDigitBox");
MultiKey.numberDigits = 0;
var currentNumber = MultiKey.numberThumbnails;
while (currentNumber > 0) {
MultiKey.numberDigits++;
currentNumber /= 10;
currentNumber = Math.floor(currentNumber);
}
while (MultiKey.digitBox.firstChild) {
MultiKey.digitBox.removeChild(MultiKey.digitBox.firstChild);
}
for (var c=MultiKey.numberDigits; c>0; c--) {
var newImage = document.createElement("image");
newImage.setAttribute("id", "multikeyDigit" + c);
newImage.setAttribute("class", "multikeyDigit");
if (c != 1) {
newImage.setAttribute("number", "?");
} else {
newImage.setAttribute("number", MultiKey.initialNumber);
}
MultiKey.digitBox.appendChild(newImage);
}
MultiKey.updateCurrentDialData();
/*
addEventListener("keydown", function(event) { keyDownHandler(event); }, true);
addEventListener("keyup", function(event) { keyUpHandler(event); }, true);
addEventListener("blur", function(event) { blurHandler(event); }, false);
*/
},
Unload: function() {
if (!MultiKey.cancelledMultikey) {
SpeedDial.multikeyDialSelected(MultiKey.getCurrentNumber(), MultiKey.targetAction);
}
},
show: function() {
var mainBox = document.getElementById("multikeyMainBox");
var mainSubBox = document.getElementById("multikeyMainSubBox");
var multikeyBackground = document.getElementById("speeddial-multikey-background");
if (SpeedDial.isFirefox3) {
// "panel" only exists on Firefox 3
var targetPanel;
if (!MultiKey.initiatedFirefox3) {
mainBox.removeChild(mainSubBox);
var targetPanel = document.createElement("panel");
targetPanel.setAttribute("id", "speeddial-multikey-panel");
targetPanel.appendChild(mainSubBox);
document.getElementById("mainPopupSet").appendChild(targetPanel);
MultiKey.initiatedFirefox3 = true;
} else {
targetPanel = document.getElementById("speeddial-multikey-panel");
}
var multiKeyWidth = Math.floor(window.innerWidth * SpeedDial.prefs.getIntPref("multikeyOverlayWidthModifier") / 100);
var multiKeyHeight = targetPanel.boxObject.height;
targetPanel.setAttribute("width", multiKeyWidth);
targetPanel.setAttribute("left", Math.floor((screen.availWidth - multiKeyWidth) / 2));
targetPanel.setAttribute("top", (screen.availHeight - multiKeyHeight) / 2);
targetPanel.openPopup(null, "", 0, 0, false, true);
} else {
mainBox.setAttribute("multikey-shown", true);
mainSubBox.style.width = mainBox.style.width = window.innerWidth+'px';
mainSubBox.style.height = mainBox.style.height = window.innerHeight+'px';
multikeyBackground.style.width = (window.innerWidth * 2)+'px';
multikeyBackground.style.height = (window.innerHeight * 2)+'px';
multikeyBackground.setAttribute("multikey-shown", true);
}
MultiKey.showingMultiKey = true;
MultiKey.Startup();
},
hide: function() {
if (SpeedDial.isFirefox3) {
document.getElementById("speeddial-multikey-panel").hidePopup();
} else {
document.getElementById("multikeyMainBox").setAttribute("multikey-shown", false);
document.getElementById("speeddial-multikey-background").setAttribute("multikey-shown", false);
}
MultiKey.showingMultiKey = false;
MultiKey.Unload();
},
updateCurrentDialData: function() {
var currentNumber = MultiKey.getCurrentNumber();
if ((currentNumber < 1) || (currentNumber > MultiKey.numberThumbnails)) {
document.getElementById("multikeyCurrentDialLabel").setAttribute("value", SpeedDial.bundle.getString("outofrange.label"));
document.getElementById("multikeyCurrentDialIcon").removeAttribute("src");
document.getElementById("multikeyCurrentDialURL").setAttribute("value", " ");
} else if (SpeedDial.prefs.prefHasUserValue("thumbnail-" + currentNumber + "-url")) {
var title = SpeedDial.prefs.getComplexValue("thumbnail-" + currentNumber + "-label", Components.interfaces.nsISupportsString).data;
if (title == "") {
document.getElementById("multikeyCurrentDialLabel").setAttribute("value", SpeedDial.bundle.getString("untitled.label"));
} else {
document.getElementById("multikeyCurrentDialLabel").setAttribute("value", title);
}
var thumbnailIcon = "";
if (SpeedDial.isFirefox3) {
thumbnailIcon = SpeedDialUtils.getDialIcon(currentNumber);
} else {
if (SpeedDial.prefs.prefHasUserValue("thumbnail-" + currentNumber + "-icon")) {
thumbnailIcon = SpeedDial.prefs.getCharPref("thumbnail-" + currentNumber + "-icon");
if (thumbnailIcon == "data:") {
thumbnailIcon = "";
}
}
}
document.getElementById("multikeyCurrentDialIcon").setAttribute("src", thumbnailIcon);
document.getElementById("multikeyCurrentDialURL").setAttribute("value", SpeedDial.prefs.getCharPref("thumbnail-" + currentNumber + "-url"));
} else {
document.getElementById("multikeyCurrentDialLabel").setAttribute("value", SpeedDial.bundle.getString("unassigned.label"));
document.getElementById("multikeyCurrentDialIcon").removeAttribute("src");
document.getElementById("multikeyCurrentDialURL").setAttribute("value", " ");
}
},
keyDownHandler: function(event) {
var processed = false;
if (event.keyCode == 16) {
MultiKey.shiftPressed = true;
processed = true;
} else if (event.keyCode == 17) {
MultiKey.ctrlPressed = true;
processed = true;
} else if ((event.keyCode == 18) || (event.keyCode == 224)) { // Alt or Apple key
MultiKey.altPressed = true;
processed = true;
} else if (event.keyCode == 13) { // Enter
MultiKey.isClosing = true;
MultiKey.hide();
processed = true;
} else if (event.keyCode == 8) { // Backspace
MultiKey.processBackspace();
processed = true;
} else if (event.keyCode == 27) { // Escape
MultiKey.cancelDialog();
processed = true;
} else if ((event.keyCode == 37) || (event.keyCode == 38) || (event.keyCode == 109)) { // Cursor up, left, and minus
MultiKey.goPreviousDial();
processed = true;
} else if ((event.keyCode == 39) || (event.keyCode == 40) || (event.keyCode == 61)) { // Cursor down, right, and plus
MultiKey.goNextDial();
processed = true;
}
if (processed == true) {
event.preventDefault();
event.preventBubble();
event.preventCapture();
event.stopPropagation();
}
},
keyUpHandler: function (event) {
var processed = false;
if (event.keyCode == 16) {
processed = true;
MultiKey.shiftPressed = false;
} else if (event.keyCode == 17) {
processed = true;
MultiKey.ctrlPressed = false;
} else if ((event.keyCode == 18) || (event.keyCode == 224)) {
processed = true;
MultiKey.altPressed = false;
} else if ((event.keyCode == 13) || (event.keyCode == 8) || (event.keyCode == 27) ||(event.keyCode == 37) || (event.keyCode == 38) || (event.keyCode == 109) || (event.keyCode == 39) || (event.keyCode == 40) || (event.keyCode == 61)) {
processed = true;
}
if (!MultiKey.ctrlPressed && !MultiKey.shiftPressed && !MultiKey.altPressed) {
MultiKey.isClosing = true;
MultiKey.hide();
} else if (processed) {
event.preventDefault();
event.preventBubble();
event.preventCapture();
event.stopPropagation();
}
},
processKey: function (event, typedNumber) {
var firstDigit = document.getElementById("multikeyDigit" + MultiKey.numberDigits);
for (var c=MultiKey.numberDigits; c>1; c--) {
document.getElementById("multikeyDigit" + c).setAttribute("number", document.getElementById("multikeyDigit" + (c - 1)).getAttribute("number"));
}
// Set last digit
document.getElementById("multikeyDigit1").setAttribute("number", typedNumber);
MultiKey.updateCurrentDialData();
if ((firstDigit.getAttribute("number") != "?") && (MultiKey.multikeySelectWhenComplete)) {
// Completed! Process
MultiKey.isClosing = true;
MultiKey.hide();
}
event.preventDefault();
event.preventBubble();
event.preventCapture();
event.stopPropagation();
},
processBackspace: function () {
for (var c=1; c<=MultiKey.numberDigits; c++) {
if (c<MultiKey.numberDigits) {
document.getElementById("multikeyDigit" + c).setAttribute("number", document.getElementById("multikeyDigit" + (c + 1)).getAttribute("number"));
} else {
document.getElementById("multikeyDigit" + c).setAttribute("number", "?");
}
}
MultiKey.updateCurrentDialData();
},
goPreviousDial: function () {
var currentNumber = MultiKey.getCurrentNumber();
var originalNumber = currentNumber;
do {
currentNumber--;
if (currentNumber < 1) {
currentNumber = MultiKey.numberThumbnails;
}
} while ((currentNumber != originalNumber) && !SpeedDial.prefs.prefHasUserValue("thumbnail-" + currentNumber + "-url"));
if (currentNumber != originalNumber) {
MultiKey.setCurrentNumber(currentNumber);
}
},
goNextDial: function () {
var currentNumber = MultiKey.getCurrentNumber();
var originalNumber = currentNumber;
do {
currentNumber++;
if (currentNumber > MultiKey.numberThumbnails) {
currentNumber = 1;
}
} while ((currentNumber != originalNumber) && !SpeedDial.prefs.prefHasUserValue("thumbnail-" + currentNumber + "-url"));
if (currentNumber != originalNumber) {
MultiKey.setCurrentNumber(currentNumber);
}
},
setCurrentNumber: function (currentNumber) {
for (var c=1; c<=MultiKey.numberDigits; c++) {
var currentDigit = document.getElementById("multikeyDigit" + c);
if (currentNumber > 0) {
currentDigit.setAttribute("number", parseInt(currentNumber % 10));
currentNumber = Math.floor(currentNumber / 10);
} else {
currentDigit.setAttribute("number", "?");
}
}
MultiKey.updateCurrentDialData();
},
getCurrentNumber: function () {
var currentModifier = 1;
var currentValue = 0;
for (var c=1; c<=MultiKey.numberDigits; c++) {
var digitValue = document.getElementById("multikeyDigit" + c).getAttribute("number");
if (digitValue != "?") {
currentValue += parseInt(digitValue) * currentModifier;
}
currentModifier *= 10;
}
return currentValue;
},
cancelDialog: function () {
if (!MultiKey.isClosing) {
MultiKey.cancelledMultikey = true;
MultiKey.isClosing = true;
MultiKey.hide();
}
},
blurHandler: function (event) {
MultiKey.cancelDialog();
}
}